#include "page_manager.h"

page_list_t page_list[PAGE_ID_MAX];
int current_page; 



// 页面管理器运行
void page_manager_run(void)
{
    page_list[current_page].LoopCallback();    
}

// 切换页面
void page_manager_switch_page(uint32_t page_id, uint8_t page_condition)
{
    if((current_page != page_id) && (page_list[page_id].status == PAGE_STATUS_IDLE))
    {
        if(page_list[current_page].ExitCallback != NULL)
        {
            page_list[current_page].ExitCallback(page_condition);
            page_list[current_page].status = PAGE_STATUS_IDLE;
        }
        current_page = page_id;
        if(page_list[current_page].SetupCallback != NULL)
        {
            page_list[current_page].SetupCallback(page_condition);
            page_list[current_page].status = PAGE_STATUS_RUN;
        }
    }

}

/**
  * @brief  注册一个基本页面，包含一个初始化函数，循环函数，退出函数，事件函数
  * @param  pageID: 页面编号
	*	@param	pageText: 页面标题的指针
	*	@param	pageIcon: 页面图标的指针
  * @param  setupCallback: 初始化函数回调
  * @param  loopCallback: 循环函数回调
  * @param  exitCallback: 退出函数回调
  * @param  eventCallback: 事件函数回调
  * @retval 无
  */
void page_register(
    uint8_t page_id,
	uint8_t * _page_title,
	uint8_t * _page_icon,
    SetupCallback_t _SetupCallback,
    LoopCallback_t _LoopCallback,
    ExitCallback_t _ExitCallback,
    EventCallback_t _EventCallback
)
{
    page_list[page_id].title = _page_title;
    page_list[page_id].icon = _page_icon;
    page_list[page_id].status = PAGE_STATUS_IDLE;
    page_list[page_id].SetupCallback = _SetupCallback;
    page_list[page_id].LoopCallback = _LoopCallback;
    page_list[page_id].ExitCallback = _ExitCallback;
    page_list[page_id].EventCallback = _EventCallback;
}



// 打开当前页面
void page_manager_open_current_page(void)
{
    if(page_list[current_page].status == PAGE_STATUS_IDLE)
    {
        page_list[current_page].SetupCallback(PAGE_CONDITION_ENTER);
        page_list[current_page].status = PAGE_STATUS_RUN;
    }
}

void page_manager_close_current_page(void)
{
    if(page_list[current_page].status == PAGE_STATUS_RUN)
    {
        page_list[current_page].ExitCallback(PAGE_CONDITION_RETURN);
        page_list[current_page].status = PAGE_STATUS_IDLE;
    }
}

// 事件传递到页面
void page_manager_event_transmit(uint8_t event)
{
    if((page_list[current_page].EventCallback != NULL) && (page_list[current_page].status == PAGE_STATUS_RUN))
        page_list[current_page].EventCallback(event);
}

void page_manager_init(void)
{
    // 注册界面
	PAGE_REG(page_id_home);
    PAGE_REG(page_id_menu);
    PAGE_REG(page_id_read);
	current_page = page_id_home;
	page_manager_open_current_page();
}
